import java.util.*;
//491. 非递减子序列
class Solution {
    public List<List<Integer>> findSubsequences(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        dfs(res, new ArrayList<>(), 0, nums);
        return res;
    }

    public void dfs(List<List<Integer>> res, List<Integer> path, int index, int[] nums) {
        if (path.size() >= 2) {
            res.add(new ArrayList<>(path));
        }
        Set<Integer> used = new HashSet<>(); // 用于去重
        for (int i = index; i < nums.length; i++) {
            if (!path.isEmpty() && nums[i] < path.get(path.size() - 1)) {
                continue; // 仅跳过当前元素，而不是 return
            }
            if (used.contains(nums[i])) {
                continue; // 避免同层重复选择相同的数字
            }
            used.add(nums[i]);
            path.add(nums[i]);
            dfs(res, path, i + 1, nums);
            path.remove(path.size() - 1);
        }
    }
}